package com.itheima.autoGenerate;


import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import java.util.ArrayList;
import java.util.List;

public class AutoGenerate {
    public static void main(String[] args) {

        //创建代码生成器对象
        AutoGenerator autoGenerator = new AutoGenerator();
        //设置数据源
        DataSourceConfig ds = new DataSourceConfig();
        ds.setDriverName("com.mysql.cj.jdbc.Driver");
        ds.setUrl("jdbc:mysql://localhost:3306/reggie");
        ds.setUsername("root");
        ds.setPassword("1234");
        //设置数据源
        autoGenerator.setDataSource(ds);

        //设置全局配置
        GlobalConfig globalConfig = new GlobalConfig();
        globalConfig.setOutputDir(System.getProperty("user.dir") + "/reggie_auto/src/main/java");  //设置代码生成位置
        globalConfig.setOpen(false); //设置生成完毕后是否打开生成代码所在的目录
        globalConfig.setAuthor("刘少宽"); //设置作者
        globalConfig.setFileOverride(true);  //设置是否覆盖原始生成的文件
        globalConfig.setMapperName("%sMapper"); //设置数据层接口名，%s为占位符，指代模块名称
        globalConfig.setIdType(IdType.ASSIGN_ID);  //设置Id生成策略
        autoGenerator.setGlobalConfig(globalConfig);


        //设置包名相关配置
        PackageConfig packageInfo = new PackageConfig();
        packageInfo.setParent("com.itheima.reggie_auto");  //设置生成的包名，与代码所在位置不冲突，二者叠加组成完整路径
        packageInfo.setEntity("entity");  //设置实体类包名
        packageInfo.setMapper("mapper");  //设置数据层包名
        autoGenerator.setPackageInfo(packageInfo);

        //策略设置
        StrategyConfig strategyConfig = new StrategyConfig();

        // strategyConfig.setInclude("tbl_user"); //设置当前参与生成的表名，参数为可变参数
        // strategyConfig.setTablePrefix("tbl_"); //设置数据库表的前缀名称，模块名 = 数据库表名 - 前缀名  例如： User = tbl_user - tbl_
        // 表名生成策略：下划线连转驼峰
        strategyConfig.setNaming(NamingStrategy.underline_to_camel);
        // 表字段生成策略：下划线连转驼峰
        strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);

        strategyConfig.setRestControllerStyle(true);  //设置是否启用Rest风格
        // strategyConfig.setVersionFieldName("version"); //设置乐观锁字段名
        // strategyConfig.setLogicDeleteFieldName("deleted"); //设置逻辑删除字段名
        strategyConfig.setEntityLombokModel(true); //设置是否启用lombok
        // 自动填充
        TableFill tableFill1 = new TableFill("createTime", FieldFill.INSERT);
        TableFill tableFill2 = new TableFill("updateTime", FieldFill.INSERT_UPDATE);
        TableFill tableFill3 = new TableFill("createUser", FieldFill.INSERT);
        TableFill tableFill4 = new TableFill("updateUser", FieldFill.INSERT_UPDATE);

        List<TableFill> arr = new ArrayList();
        arr.add(tableFill1);
        arr.add(tableFill2);
        arr.add(tableFill3);
        arr.add(tableFill4);
        strategyConfig.setTableFillList(arr);

        autoGenerator.setStrategy(strategyConfig);

        //执行代码生成
        autoGenerator.execute();

    }
}
